//
//  Int+Ext.swift
//  TTCOM
//
//  Created by Toj on 8/1/22.
//

import Foundation
import MachO

public extension ExtInt where Self : BinaryInteger {
    /** 判断单复数
     - parameter singular: 字符串单数形式
     - parameter plural:   字符串复数数形式
     - returns: 返回当前值为单数还是复数
     ** 0在充当数量的时候 是 复数
     */
    func cm_plural(singular: String, plural: String) -> String {
        let noun = (self == 1 ? singular : plural)
        return "\(self) \(noun)"
    }
    
    /** 质数(素数):
     ** 1. 大于1的自然数
     ** 2. 除了1 和 它本身 以外不再有其他因数的自然数
     * 是否是质数(素数)
     */
    var cm_isPrime: Bool {
        guard self > 1 else { return false }
        let max = Int.max
        guard self <= max else { return false }
        let number = Int(self)
        var b = true
        for i in 2..<number {
            guard number % i == 0 else { continue }
            b = false
            break
        }
        return b
    }
    
    // MARK: - 进制
    /// 1000 进制
    var to_k: String {
        guard self > 0 else { return "" }
        guard self >= 1000 else { return "\(self)" }
        let k = self / 1000
        return "\(k)k"
    }
}

public extension ExtInt where Self : BinaryInteger {
    
    /**
     * ASCII 值转String [0, 256)
     */
    var to_ASCII: String? {
        guard (self >= 0 && self < (1 << 8) - 1) else {
            return nil
        }
        let number = UInt8(self)
        let us = UnicodeScalar(number)
        let char = Character(us)
        
        return String(char)
    }
}
